package com.itheima;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.SQLOutput;
import java.util.List;

/**
 * 动态代理
 */
public class CarProxy {
    public static void main(String[] args) {

        //创建一个Mycar对象（被代理对象）
       Car mycar = new Mycar();

       //创建代理对象
        /**
         *
         * 参数一：类加载器  当前类.class.getClassLoader();
         * 参数二：被代理类的实现的接口数组，
         * 参数三：处理器执行器  作用：对被代理对象中的方法（功能）进行增强
         */
     Car carProxy =(Car)Proxy.newProxyInstance(CarProxy.class.getClassLoader(), mycar.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                /*
                代理对象执行的增强方法
                Object proxy 代理对象
                Method method：被代理中的要执行的方法
                Object[] args：被代理方法中的参数
                * */
                System.out.println(Car.class.getName());
                Object invoke = method.invoke(mycar, args);
                return invoke;

            }
        });






        carProxy.save();
        carProxy.deleteById(1);
        carProxy.update();
        List<String> all = carProxy.findAll();
        System.out.println(all);

        String byId = carProxy.findById(1);
        System.out.println(byId);
    }

}
